var http = require('http')
, fs = require('fs')
, path = require('path')
, mime = require('mime');

var cache = {};
var chatServer = require('./lib/chat_server');

function sendFile(res,filePath,fileContents){
    res.writeHead(
        200,
        {'content-type':mime.lookup(path.basename(filePath))});
    res.end(fileContents);
};

function send404(res){
    res.writeHead(404,{'Content-Type':'text/plain'});
    res.write('Error 404: resource not found.');
    res.end();
};

function serveStatic(res,cache,absPath){
    if(cache[absPath]){
        sendFile(res,absPath,cache[absPath]);
    }else{
        fs.exists(absPath,function(exists){
            if(exists){
                fs.readFile(absPath,function(err,data){
                    if(err){ send404(response)}
                    else{
                        cache[absPath] = data;
                        sendFile(res,absPath,data);
                    }
                });
            }else{
                send404(res);
            }
        });
    }
}

var server = http.createServer(function(request,response){
    var filePath = false;
    if(request.url == "/"){
        filePath = 'public/index.html';
    } else{
        filePath = 'public' + request.url;
    }
    var absPath = './' + filePath;
    serveStatic(response,cache,absPath);
});

server.listen(3000,function(){
    console.log("listening on port 3000");
});

chatServer.listen(server);
